{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 示例：USDA食品数据库\n",
    "import json\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from pandas import DataFrame, Series\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6636"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "db = json.load(open('../data/usda_food/database.json'))\n",
    "len(db)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['id', 'description', 'tags', 'manufacturer', 'group', 'portions', 'nutrients'])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "db[0].keys() # 查看有哪些字段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'description': 'Protein',\n",
       " 'group': 'Composition',\n",
       " 'units': 'g',\n",
       " 'value': 25.18}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "db[0]['nutrients'][0] # 查看第0条记录营养成分的第一个元素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>description</th>\n",
       "      <th>group</th>\n",
       "      <th>units</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Protein</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>25.18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Total lipid (fat)</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>29.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Carbohydrate, by difference</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>3.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Ash</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>3.28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Energy</td>\n",
       "      <td>Energy</td>\n",
       "      <td>kcal</td>\n",
       "      <td>376.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   description        group units   value\n",
       "0                      Protein  Composition     g   25.18\n",
       "1            Total lipid (fat)  Composition     g   29.20\n",
       "2  Carbohydrate, by difference  Composition     g    3.06\n",
       "3                          Ash        Other     g    3.28\n",
       "4                       Energy       Energy  kcal  376.00"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nutrients = DataFrame(db[0]['nutrients']) # 根据第0条记录的营养成本构造一个DataFrame\n",
    "nutrients.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>description</th>\n",
       "      <th>group</th>\n",
       "      <th>id</th>\n",
       "      <th>manufacturer</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Cheese, caraway</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1008</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Cheese, cheddar</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1009</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Cheese, edam</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1018</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Cheese, feta</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1019</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Cheese, mozzarella, part skim milk</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1028</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                          description                   group    id  \\\n",
       "0                     Cheese, caraway  Dairy and Egg Products  1008   \n",
       "1                     Cheese, cheddar  Dairy and Egg Products  1009   \n",
       "2                        Cheese, edam  Dairy and Egg Products  1018   \n",
       "3                        Cheese, feta  Dairy and Egg Products  1019   \n",
       "4  Cheese, mozzarella, part skim milk  Dairy and Egg Products  1028   \n",
       "\n",
       "  manufacturer  \n",
       "0               \n",
       "1               \n",
       "2               \n",
       "3               \n",
       "4               "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "info_keys = ['description', 'group', 'id', 'manufacturer']\n",
    "info = DataFrame(db, columns=info_keys) # 根据指定的列构造DataFrame\n",
    "info.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 6636 entries, 0 to 6635\n",
      "Data columns (total 4 columns):\n",
      "description     6636 non-null object\n",
      "group           6636 non-null object\n",
      "id              6636 non-null int64\n",
      "manufacturer    5195 non-null object\n",
      "dtypes: int64(1), object(3)\n",
      "memory usage: 207.5+ KB\n"
     ]
    }
   ],
   "source": [
    "info.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Vegetables and Vegetable Products    812\n",
       "Beef Products                        618\n",
       "Baked Products                       496\n",
       "Breakfast Cereals                    403\n",
       "Fast Foods                           365\n",
       "Legumes and Legume Products          365\n",
       "Lamb, Veal, and Game Products        345\n",
       "Sweets                               341\n",
       "Pork Products                        328\n",
       "Fruits and Fruit Juices              328\n",
       "Beverages                            278\n",
       "Soups, Sauces, and Gravies           275\n",
       "Finfish and Shellfish Products       255\n",
       "Baby Foods                           209\n",
       "Cereal Grains and Pasta              183\n",
       "Ethnic Foods                         165\n",
       "Snacks                               162\n",
       "Nut and Seed Products                128\n",
       "Poultry Products                     116\n",
       "Sausages and Luncheon Meats          111\n",
       "Dairy and Egg Products               107\n",
       "Fats and Oils                         97\n",
       "Meals, Entrees, and Sidedishes        57\n",
       "Restaurant Foods                      51\n",
       "Spices and Herbs                      41\n",
       "Name: group, dtype: int64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.value_counts(info.group) # 查看group这列各个值的出现次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>description</th>\n",
       "      <th>group</th>\n",
       "      <th>units</th>\n",
       "      <th>value</th>\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Protein</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>25.18</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Total lipid (fat)</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>29.20</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Carbohydrate, by difference</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>3.06</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Ash</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>3.28</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Energy</td>\n",
       "      <td>Energy</td>\n",
       "      <td>kcal</td>\n",
       "      <td>376.00</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   description        group units   value    id\n",
       "0                      Protein  Composition     g   25.18  1008\n",
       "1            Total lipid (fat)  Composition     g   29.20  1008\n",
       "2  Carbohydrate, by difference  Composition     g    3.06  1008\n",
       "3                          Ash        Other     g    3.28  1008\n",
       "4                       Energy       Energy  kcal  376.00  1008"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nutrients = []\n",
    "# 把每条记录的营养成分单独拿出来做一个DataFrame，同时用id匹配原记录。\n",
    "for rec in db:\n",
    "    fnuts = DataFrame(rec['nutrients'])\n",
    "    fnuts['id'] = rec['id']\n",
    "    nutrients.append(fnuts)\n",
    "nutrients = pd.concat(nutrients, ignore_index=True)\n",
    "nutrients.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14179"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nutrients.duplicated().sum() # 看下有多少条重复记录"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "nutrients = nutrients.drop_duplicates() # 删除重复记录"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 6636 entries, 0 to 6635\n",
      "Data columns (total 4 columns):\n",
      "food            6636 non-null object\n",
      "fgroup          6636 non-null object\n",
      "id              6636 non-null int64\n",
      "manufacturer    5195 non-null object\n",
      "dtypes: int64(1), object(3)\n",
      "memory usage: 207.5+ KB\n"
     ]
    }
   ],
   "source": [
    "col_mapping = {'description': 'food', 'group': 'fgroup'}\n",
    "info = info.rename(columns=col_mapping, copy=False) # 列重命名\n",
    "info.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 375176 entries, 0 to 389354\n",
      "Data columns (total 5 columns):\n",
      "nutrient    375176 non-null object\n",
      "nutgroup    375176 non-null object\n",
      "units       375176 non-null object\n",
      "value       375176 non-null float64\n",
      "id          375176 non-null int64\n",
      "dtypes: float64(1), int64(1), object(3)\n",
      "memory usage: 17.2+ MB\n"
     ]
    }
   ],
   "source": [
    "col_mapping = {'description': 'nutrient', 'group': 'nutgroup'}\n",
    "nutrients = nutrients.rename(columns=col_mapping, copy=False)\n",
    "nutrients.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                      nutrient     nutgroup units   value    id  \\\n",
      "0                      Protein  Composition     g   25.18  1008   \n",
      "1            Total lipid (fat)  Composition     g   29.20  1008   \n",
      "2  Carbohydrate, by difference  Composition     g    3.06  1008   \n",
      "3                          Ash        Other     g    3.28  1008   \n",
      "4                       Energy       Energy  kcal  376.00  1008   \n",
      "\n",
      "              food                  fgroup manufacturer  \n",
      "0  Cheese, caraway  Dairy and Egg Products               \n",
      "1  Cheese, caraway  Dairy and Egg Products               \n",
      "2  Cheese, caraway  Dairy and Egg Products               \n",
      "3  Cheese, caraway  Dairy and Egg Products               \n",
      "4  Cheese, caraway  Dairy and Egg Products               \n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 375176 entries, 0 to 375175\n",
      "Data columns (total 8 columns):\n",
      "nutrient        375176 non-null object\n",
      "nutgroup        375176 non-null object\n",
      "units           375176 non-null object\n",
      "value           375176 non-null float64\n",
      "id              375176 non-null int64\n",
      "food            375176 non-null object\n",
      "fgroup          375176 non-null object\n",
      "manufacturer    293054 non-null object\n",
      "dtypes: float64(1), int64(1), object(6)\n",
      "memory usage: 25.8+ MB\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "ndata = pd.merge(nutrients, info, on='id', how='outer') # 做一个全连接\n",
    "print(ndata.head())\n",
    "print(ndata.info())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x2494b13ddd8>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2494037e3c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 根据营养成分和食物种类分组，quantile(0.5)自动计算中位数。\n",
    "result = ndata.groupby(['nutrient', 'fgroup'])['value'].quantile(0.5) \n",
    "result['Zinc, Zn'].sort_values().plot(kind='barh') # 各种食物锌含量的中位数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>value</th>\n",
       "      <th>food</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>nutgroup</th>\n",
       "      <th>nutrient</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">Amino Acids</th>\n",
       "      <th>Alanine</th>\n",
       "      <td>8.009</td>\n",
       "      <td>Gelatins, dry powder, unsweetened</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arginine</th>\n",
       "      <td>7.436</td>\n",
       "      <td>Seeds, sesame flour, low-fat</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Aspartic acid</th>\n",
       "      <td>10.203</td>\n",
       "      <td>Soy protein isolate</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cystine</th>\n",
       "      <td>1.307</td>\n",
       "      <td>Seeds, cottonseed flour, low fat (glandless)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Glutamic acid</th>\n",
       "      <td>17.452</td>\n",
       "      <td>Soy protein isolate</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            value  \\\n",
       "nutgroup    nutrient                \n",
       "Amino Acids Alanine         8.009   \n",
       "            Arginine        7.436   \n",
       "            Aspartic acid  10.203   \n",
       "            Cystine         1.307   \n",
       "            Glutamic acid  17.452   \n",
       "\n",
       "                                                                   food  \n",
       "nutgroup    nutrient                                                     \n",
       "Amino Acids Alanine                   Gelatins, dry powder, unsweetened  \n",
       "            Arginine                       Seeds, sesame flour, low-fat  \n",
       "            Aspartic acid                           Soy protein isolate  \n",
       "            Cystine        Seeds, cottonseed flour, low fat (glandless)  \n",
       "            Glutamic acid                           Soy protein isolate  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_maximum = lambda x: x.xs(x.value.idxmax()) # 根据最大值的位置选择一行\n",
    "get_minimum = lambda x: x.xs(x.value.idxmin())\n",
    "by_nutrient = ndata.groupby(['nutgroup', 'nutrient'])\n",
    "max_foods = by_nutrient.apply(get_maximum)[['value', 'food']] # 每个营养种类里，对应每个营养成分，含量最高的食物。\n",
    "max_foods.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "nutrient\n",
       "Alanine                           Gelatins, dry powder, unsweetened\n",
       "Arginine                               Seeds, sesame flour, low-fat\n",
       "Aspartic acid                                   Soy protein isolate\n",
       "Cystine                Seeds, cottonseed flour, low fat (glandless)\n",
       "Glutamic acid                                   Soy protein isolate\n",
       "Glycine                           Gelatins, dry powder, unsweetened\n",
       "Histidine                Whale, beluga, meat, dried (Alaska Native)\n",
       "Hydroxyproline    KENTUCKY FRIED CHICKEN, Fried Chicken, ORIGINA...\n",
       "Isoleucine        Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Leucine           Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Lysine            Seal, bearded (Oogruk), meat, dried (Alaska Na...\n",
       "Methionine                    Fish, cod, Atlantic, dried and salted\n",
       "Phenylalanine     Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Proline                           Gelatins, dry powder, unsweetened\n",
       "Serine            Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Threonine         Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Tryptophan         Sea lion, Steller, meat with fat (Alaska Native)\n",
       "Tyrosine          Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Valine            Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Name: food, dtype: object"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_foods.loc['Amino Acids', 'food'] # 这里因为是多重索引，所以返回的索引是对应的内层索引。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
